/* C++11 STL容器  push/insert  =>  emplace新的方法
 *
 * */

#include <iostream>
#include <vector>
using namespace std;

class Test{
public:
    Test(int a){
        cout<<"Test(int)"<<endl;
    }
    Test(int a,int b){
        cout<<"Test(int,int)"<<endl;
    }
    ~Test(){
        cout<<"~Test()"<<endl;
    }
    Test(const Test&){
        cout<<"Test(const Test&)"<<endl;
    }
    Test(Test&&){
        cout<<"Test(Test&&)"<<endl;
    }
};

int main(){
    Test t1(10);
    vector<Test> v;
    v.reserve(100);
    cout<<"-----------"<<endl;
    //直接插入对象，两个是没有区别的
    v.push_back(t1);
    v.emplace_back(t1);
    cout<<"-----------"<<endl;
    v.push_back(Test(20));
    v.emplace_back(Test(20));
    cout<<"-----------"<<endl;

    //给emplace传入Test对象构造所需要的参数，直接在容器底层构造对象即可
    v.emplace_back(20);
    v.emplace_back(30,40);
    cout<<"-----------"<<endl;

    /*
     map<int ,string> m;
     m.insert(make_pair(10,"wyx"));
     m.emplace(10,"wyx");   =>在map底层直接调用普通构造函数，生成一个pair对象
     * */
    return 0;
}
